package cyrille.net;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.junit.Test;
public class UrlTest {
@Test
public void testFileUrl() throws Exception {
String filePath = "c:/test-" + DateFormatUtils.format(System.currentTimeMillis(), "yyyyMMdd.HHmmssS") + ".txt";
File file = new File(filePath);
file.deleteOnExit();
FileWriter writer = new FileWriter(filePath);
writer.append("Hello world");
writer.close();
URL url = new URL("file:///" + filePath);
InputStream in = url.openStream();
System.out.println("Read " + url);
IOUtils.copy(in, System.out);
}
@Test
public void testBasicAuth() throws Exception {
URL url = new URL("http://www-devsf:8081/acegi-security-sfrcas-demo/protected/parameters.jsp");
URLConnection connection = url.openConnection();
String username = "osm";
String password = "1111";
String loginPassword = username + ":" + password;
connection.setRequestProperty("Authorization", "Basic " + new sun.misc.BASE64Encoder().encode(loginPassword.getBytes()));
connection.connect();
dumpConnection(connection);
}
@Test
public void testSslUrl() throws Exception {
URL url = new URL("https://cas-server:10008");
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.connect();
dumpConnection(connection);
}
private void dumpConnection(URLConnection connection) throws IOException, SSLPeerUnverifiedException {
if (connection instanceof HttpURLConnection) {
HttpURLConnection httpConnection = (HttpURLConnection)connection;
System.out.println("Connection Response Message " + httpConnection.getResponseMessage());
}
Map<String, List<String>> headers = connection.getHeaderFields();
for (Entry<String, List<String>> entry : headers.entrySet()) {
System.out.print(entry.getKey() + "\t: ");
for (String value : entry.getValue()) {
System.out.print(value + ", ");
}
System.out.println();
}
if (connection instanceof HttpsURLConnection) {
HttpsURLConnection httpsConnection = (HttpsURLConnection)connection;
System.out.println("CipherSuite\t: " + httpsConnection.getCipherSuite());
Certificate[] serverCertificates = httpsConnection.getServerCertificates();
for (Certificate certificate : serverCertificates) {
if (certificate instanceof X509Certificate) {
X509Certificate x509Certificate = (X509Certificate)certificate;
System.out.println(x509Certificate.getSubjectX500Principal());
} else {
System.out.println(certificate);
}
}
}
System.out.println();
System.out.println("##################################################");
System.out.println();
InputStream in = connection.getInputStream();
IOUtils.copy(in, System.out);
}
@Test(expected = UnknownHostException.class)
public void testUnknownHostException() throws Exception {
URL url = new URL("http://unknown-host/");
url.openConnection().connect();
}
@Test(expected=ConnectException.class)
public void testConnectException() throws Exception {
URL url = new URL("http://localhost:12456/");
url.openConnection().connect();
}
}